#if 0
#include<bits/stdc++.h>
using namespace std;      
const int N=1e5+10;
const int maxsize=32*1e5+10;
int tire[maxsize][2];
int cnt;
int arr[N],n;
void insert(int num)
{
    int cur=0;
    for(int i=31;i>=0;i--)
    {
        int path=(num>>i)&1;
        if(tire[cur][path]==0)
        {
            tire[cur][path]=++cnt;
        }
        cur=tire[cur][path];
    }
}

int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>arr[i];
        insert(arr[i]);
    }
    int ret=0;
    for(int i=0;i<n;i++)
    {
        int cur=0;
        int ans=0;
        for(int j=31;j>=0;j--)
        {
            int bit =(arr[i]>>j)&1;
            int want =1^bit;
            if(tire[cur][want])
            {
                 ans |= (1 << j); // 修复这里
                cur=tire[cur][want];
            }
            else
            {
                cur=tire[cur][bit];
            }
        }
        ret=max(ret,ans);
    }
    cout<<ret;
    return 0;
}


#include<bits/stdc++.h>
using namespace std;      
const int N=1e5+10;
int arr[N],n;
int highindex=0;
int maxxx=0;
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>arr[i];
        maxxx=max(arr[i],maxxx);
    }
    for(int i=31;i>=0;i--)
    {
        if((maxxx>>i)&1) 
        {
            highindex=i;
            break;
        }
     }
    int ret=0;
    for(int i=highindex;i>=0;i--)
    {
        //我们想要的就是每个位置都是1
        //对于每个位置我们都要去看看所有的数中有没有满足的
        int want=(1<<i)|ret;
        set<int> sss;
        for(int j=0;j<n;j++)
        {
            int num=arr[j]>>i<<i;
            sss.insert(num);
            if(sss.count(num^want))
            {
                //找到直接退出即可
                ret=want;
                break;
            }
        }
    }
    cout<<ret;
    return 0;
}
#endif


// #include<bits/stdc++.h>
// using namespace std;
// int findMaximumXOR(vector<int>& nums) 
//     {
//         int ans=0;
//         //看看每一位可不可以为1
//         for(int i=31;i>=0;i--)
//         {
//             int want =ans|(1<<i);//这是我们想要的
//             set<int> s;
//             for(auto&ch:nums)
//             {
//                 int tem = (ch>>i)<<i;//只保留我们要的位不能舍弃i位之前的0或1
//                 //s.insert(tem);
//                 if(s.count(want^tem))
//                 {
//                     ans=want;
//                     break;
//                 }
//                  s.insert(tem);
//             }
//         }
//          return ans;
//     }

//     int main()
//     {
//         int n;cin>>n;
//         vector<int>arr(n);
//         for(int i=0;i<n;i++)cin>>arr[i];
//         cout<<findMaximumXOR(arr)<<endl;
//         return 0;
//     }